//////////////////////////////////////////////////////////////////////
// grflibEffects.h
//
// SHEN Fangyang
// me@shenfy.com
//
// Copyright (C) SHEN Fangyang, 2011, All rights reserved.
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
//  Brief Description
//
//	Blinn-Phong BRDF, Particle system, Skybox effects
//
//////////////////////////////////////////////////////////////////////
#pragma once
#include <Effect.h>

namespace grflib
{
	namespace engine
	{
		namespace aux
		{
			class CBlinnPhongEffect
				: public grflib::engine::core::CEffect
			{
			public:
				//inherited methods
				CBlinnPhongEffect(void);
				virtual ~CBlinnPhongEffect(void);
				
				virtual HRESULT SetShaderVariables(boost::shared_ptr<engine::core::CMaterial> &pMaterial, const std::string &strTechnique);
			};

            class CParticleEffect
				: public grflib::engine::core::CEffect
			{
			public:
				//inherited methods
				CParticleEffect(void);
				virtual ~CParticleEffect(void);
				
				virtual HRESULT SetShaderVariables(boost::shared_ptr<grflib::engine::core::CMaterial> &pMaterial, const std::string &strTechnique);
			};

            class CSkyBoxEffect
				: public grflib::engine::core::CEffect
			{
			public:
				//inherited methods
				CSkyBoxEffect(void);
				virtual ~CSkyBoxEffect(void);
				
				virtual HRESULT SetShaderVariables(boost::shared_ptr<grflib::engine::core::CMaterial> &pMaterial, const std::string &strTechnique);
			};

			class CBgImageEffect
				: public grflib::engine::core::CEffect
			{
			public:
				CBgImageEffect(void);
				virtual ~CBgImageEffect(void);

				virtual HRESULT SetShaderVariables(boost::shared_ptr<grflib::engine::core::CMaterial> &pMaterial, const std::string &strTechnique);
			};

		} //namespace aux
	} //namespace engine
} //namespace grflib